package de.dnb.basics.applicationComponents;

import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class Pair<A, B> implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5933551817604546415L;

	/**
	 * Standard-Konstruktor.
	 * 
	 * @param first		auch null
	 * @param second	auch null
	 */
	public Pair(final A first, final B second) {
		this.first = first;
		this.second = second;
	}

	/**
	 * Umwandlungs-Konstruktor.
	 * 
	 * @param entry	nicht null
	 */
	public Pair(final Map.Entry<A, B> entry) {
		RangeCheckUtils.assertReferenceParamNotNull("entry", entry);
		this.first = entry.getKey();
		this.second = entry.getValue();
	}

	/**
	 * Für häufige Fälle, Umwandlung des Entrysets einer Map in eine Liste
	 * von Paaren.
	 * 
	 * @param collection	nicht null.
	 * @return				evenutell leer
	 */
	public static <A, B> Collection<Pair<A, B>> getPairs(
		final Collection<Map.Entry<A, B>> collection) {
		RangeCheckUtils.assertReferenceParamNotNull("", collection);
		List<Pair<A, B>> pairs = new LinkedList<Pair<A, B>>();
		for (Map.Entry<A, B> entry : collection) {
			pairs.add(new Pair<A, B>(entry));
		}
		return pairs;
	}

	public final A first;

	public final B second;

	@Override
	public final String toString() {
		return "<" + first + ", " + second + ">";
	}
}